package io.github.echarts.option.series;

import io.github.echarts.option.style.ItemStyle;

/**
 * 柱状图系列配置。
 */
public class BarSeries extends SeriesOption {
    
    private static final long serialVersionUID = 1L;
    private static final String TYPE = "bar";
    
    private String stack;
    private Integer barWidth;
    private Integer barGap;
    private Integer barCategoryGap;
    private Boolean showBackground;
    private ItemStyle backgroundStyle;
    private ItemStyle itemStyle;
    private String barMinHeight;
    
    /**
     * 构造一个新的柱状图系列配置实例。
     */
    public BarSeries() {
        setType(TYPE);
    }
    
    /**
     * 获取数据堆叠的分组ID。
     *
     * @return 数据堆叠的分组ID
     */
    public String getStack() {
        return stack;
    }
    
    /**
     * 设置数据堆叠的分组ID。
     * 设置相同的值后，系列会在同一个位置上堆叠显示。
     *
     * @param stack 数据堆叠的分组ID
     * @return 当前配置实例，用于链式调用
     */
    public BarSeries setStack(String stack) {
        this.stack = stack;
        return this;
    }
    
    /**
     * 获取柱条宽度。
     *
     * @return 柱条宽度
     */
    public Integer getBarWidth() {
        return barWidth;
    }
    
    /**
     * 设置柱条宽度。
     * 可以是绝对值（像素）或相对值（如'20%'）。
     *
     * @param barWidth 柱条宽度
     * @return 当前配置实例，用于链式调用
     */
    public BarSeries setBarWidth(Integer barWidth) {
        this.barWidth = barWidth;
        return this;
    }
    
    /**
     * 获取不同系列柱间距离，默认为柱条宽度的30%。
     *
     * @return 不同系列的柱间距离
     */
    public Integer getBarGap() {
        return barGap;
    }
    
    /**
     * 设置不同系列柱间距离。
     * 可以是绝对值（像素）或相对值（如'30%'）。
     *
     * @param barGap 不同系列的柱间距离
     * @return 当前配置实例，用于链式调用
     */
    public BarSeries setBarGap(Integer barGap) {
        this.barGap = barGap;
        return this;
    }
    
    /**
     * 获取同一类目下不同数据的柱间距离。
     *
     * @return 同一类目下不同数据的柱间距离
     */
    public Integer getBarCategoryGap() {
        return barCategoryGap;
    }
    
    /**
     * 设置同一类目下不同数据的柱间距离。
     * 可以是绝对值（像素）或相对值（如'20%'）。
     *
     * @param barCategoryGap 同一类目下不同数据的柱间距离
     * @return 当前配置实例，用于链式调用
     */
    public BarSeries setBarCategoryGap(Integer barCategoryGap) {
        this.barCategoryGap = barCategoryGap;
        return this;
    }
    
    /**
     * 是否显示柱条的背景。
     *
     * @return 如果显示柱条背景则为true，否则为false
     */
    public Boolean getShowBackground() {
        return showBackground;
    }
    
    /**
     * 设置是否显示柱条的背景。
     *
     * @param showBackground 如果要显示柱条背景则为true，否则为false
     * @return 当前配置实例，用于链式调用
     */
    public BarSeries setShowBackground(Boolean showBackground) {
        this.showBackground = showBackground;
        return this;
    }
    
    /**
     * 获取柱条的背景样式。
     *
     * @return 柱条背景样式
     */
    public ItemStyle getBackgroundStyle() {
        return backgroundStyle;
    }
    
    /**
     * 设置柱条的背景样式。
     *
     * @param backgroundStyle 柱条背景样式
     * @return 当前配置实例，用于链式调用
     */
    public BarSeries setBackgroundStyle(ItemStyle backgroundStyle) {
        this.backgroundStyle = backgroundStyle;
        return this;
    }
    
    /**
     * 获取柱条样式。
     *
     * @return 柱条样式
     */
    public ItemStyle getItemStyle() {
        return itemStyle;
    }
    
    /**
     * 设置柱条样式。
     *
     * @param itemStyle 柱条样式
     * @return 当前配置实例，用于链式调用
     */
    public BarSeries setItemStyle(ItemStyle itemStyle) {
        this.itemStyle = itemStyle;
        return this;
    }
    
    /**
     * 获取柱条最小高度。
     *
     * @return 柱条最小高度
     */
    public String getBarMinHeight() {
        return barMinHeight;
    }
    
    /**
     * 设置柱条最小高度，可用于防止某数据项的值过小而影响交互。
     *
     * @param barMinHeight 柱条最小高度
     * @return 当前配置实例，用于链式调用
     */
    public BarSeries setBarMinHeight(String barMinHeight) {
        this.barMinHeight = barMinHeight;
        return this;
    }

    /**
     * 获取系列数据。
     *
     * @return 系列数据
     */
    @Override
    public Object getData() {
        return super.getData();
    }
    
    /**
     * 设置系列数据。
     *
     * @param data 系列数据
     * @return 当前配置实例，用于链式调用
     */
    @Override
    public BarSeries setData(Object data) {
        super.setData(data);
        return this;
    }
} 